package cn.csc.module.product.service.spu;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.skuattrjson.vo.SkuAttrJsonSimpleReqVO;
import cn.csc.module.product.controller.admin.spu.vo.*;
import cn.csc.module.product.controller.app.spu.vo.*;
import cn.csc.module.product.dal.dataobject.spu.SpuDO;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author 云隐
 * @date 2024/11/22
 **/
public interface SpuV2Service {
    /**
     * 创建spu信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createSpu(@Valid SpuCreateDataReqV2VO createReqVO);

    /**
     * 更新spu信息
     *
     * @param createReqVO 更新信息
     */
    void updateSpu(@Valid SpuCreateDataReqV2VO createReqVO);

    /**
     * 审核商品
     * @param updateReqVO
     */
    void verifySpu(SpuUpdateReqV2VO updateReqVO);

    /**
     * 加入企业购
     * @param list
     */
    void addShopSpuBatch(@Valid List<SpuShopDataReqV2VO> list);

    /**
     * 加入企业购
     * @param createReqVO
     */
    void addShopSpu(@Valid SpuShopDataReqV2VO createReqVO);

    /**
     * 后台上下架
     * @param updateReqVO
     */
    void updateShelf(SpuUpdateReqV2VO updateReqVO);

    /**
     * 小程序端上下架
     * @param updateReqVO
     */
    void  onShelf(SpuUpdateReqV2VO updateReqVO);

    /**
     * 删除spu信息
     *
     * @param id 编号
     */
    void deleteSpu(BigInteger id);

    /**
     * 获得spu信息
     *
     * @param id 编号
     * @return spu信息
     */
    SpuDO getSpu(BigInteger id);

    /**
     * 获得spu信息
     *
     * @param id 编号
     * @return spu信息
     */
    SpuDataRespV2VO getSpuAppDetail(BigInteger id);

    /**
     * 获得spu信息列表
     *
     * @param ids 编号
     * @return spu信息列表
     */
    List<SpuDO> getSpuList(Collection<BigInteger> ids);

    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> getSpuPage(SpuPageReqV2VO pageReqVO);

    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> selectPageByOnLineTimeDesc(SpuPageReqV2VO pageReqVO);

    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> selectPageExamine(SpuPageReqV2VO pageReqVO);


    /**
     * 获得spu信息分页
     *
     * @param pageReqVO 分页查询
     * @return spu信息分页
     */
    PageResult<SpuDO> getSpuPageSingle(SpuPageReqV2VO pageReqVO);


    /**
     * 获得spu信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return spu信息列表
     */
    List<SpuDO> getSpuList(SpuExportReqV2VO exportReqVO);

    /**
     * 获取spu全部详情
     * @param id
     * @return
     */
    SpuDataRespV2VO getSpuById(BigInteger id);

    /**
     * 根据店铺id查询审核通过的商品有多少个
     * @param shopId
     * @return
     */
    Long selectOKSpuNum(BigInteger shopId);

    /**
     * 根据店铺id列表查询各店铺审核通过的商品有多少个
     * @param list 店铺id列表
     * @return
     */
    Map<String, Object> getSkuCountByShopIds(List<BigInteger> list);

    /**
     * 首页好货速递
     * @return
     */
    List<AppSpuHighRespVO>  getHighProudct();


    /**
     * app搜索查询
     * @param reqVO
     * @return
     */
    PageResult<AppSpuRespVO> searchAppProduct(AppSpuSearchPageReqVO reqVO);

    /**
     * 新增访问量
     * @param
     */
    void addFraction(SpuDataRespV2VO spuDataRespV2VO);

    /**
     * 首页上新
     * @param reqVO
     * @return
     */
    List<AppSpuRespVO> selectIndexNew(AppSpuCreateReqVO reqVO);

    /**
     * 上新商品列表
     * @param reqVO
     * @return
     */
    List<AppCategoryRespVO> selectLastNew(AppSpuCreateReqVO reqVO);

    /**
     * 筛选每天限时特惠商品
     * @param
     * @return
     */
    void discountedProduct();

    /**
     * 查询限时特惠商品
     * @return
     */
    List<SpuDO> selectdiscountedProduct();

    void updateSkuAttrJsonBySpuId(SkuAttrJsonSimpleReqVO reqVO);

}
